C++关于new[]问题!

来源:百度知道 编辑:UC知道 时间:2024/05/28 11:09:53
#include <iostream>
#include <cstring>
#include <cstddef>
#include <new>
const int maxnames=5;
class Names
{
char name[25];
static char Names::pool[];
static short int Names::inuse[maxnames];
public:
Names(char* s=0)
{if(s) std::strncpy(name,s,sizeof(name));}
void* operator new[](size_t) throw(std::bad_alloc);
void operator delete[](void*) throw();
void display() const
{std::cout<<name<<std::endl;}
};
//简单的内存池处理确定数量的Names
char Names::pool[maxnames *sizeof(Names)];
bool Names::inuse[maxnames];
//为Names类重载new运算符
void* Names::operator new(size_t size) throw(std::bad_alloc){
int elements=size/sizeof(Names);
for(int p=0;p<maxnames;p++)
{
if(!inuse[p])
{
int i;
for(i=0;i<elements&&p+i<maxnames;i++)
if(inuse[p+i])

Names *np= new Names[maxnames+1];调用的正是void* Names::operator new(size_t size)

这个new属于重载函数,注释里写的很清楚了,

new Names[maxnames+1];属于动态分配内存,需要手动释放,

pool[maxnames *sizeof(Names)];静态分配内存,超出作用域后自动释放,

new就是分配内存的函数,他的作用就是申请空间,把指针返回